package com.quanxiaoha.weblog.common.domain.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.quanxiaoha.weblog.common.domain.dos.UserStatisticsDO;

import java.util.Objects;

/**
 * 用户统计数据Mapper
 */
public interface UserStatisticsMapper extends BaseMapper<UserStatisticsDO> {

    /**
     * 根据用户ID查询统计数据
     * @param userId 用户ID
     * @return 统计数据
     */
    default UserStatisticsDO selectByUserId(Long userId) {
        LambdaQueryWrapper<UserStatisticsDO> wrapper = Wrappers.<UserStatisticsDO>lambdaQuery()
                .eq(Objects.nonNull(userId), UserStatisticsDO::getUserId, userId);
        return selectOne(wrapper);
    }

    /**
     * 增加文章数量
     * @param userId 用户ID
     * @param count 增加数量
     * @return 更新行数
     */
    default int increaseArticleCount(Long userId, int count) {
        return update(null, Wrappers.<UserStatisticsDO>lambdaUpdate()
                .setSql("total_articles = total_articles + " + count)
                .eq(UserStatisticsDO::getUserId, userId));
    }

    /**
     * 增加浏览量
     * @param userId 用户ID
     * @param count 增加数量
     * @return 更新行数
     */
    default int increaseViewCount(Long userId, int count) {
        return update(null, Wrappers.<UserStatisticsDO>lambdaUpdate()
                .setSql("total_views = total_views + " + count)
                .eq(UserStatisticsDO::getUserId, userId));
    }

    /**
     * 增加点赞数
     * @param userId 用户ID
     * @param count 增加数量
     * @return 更新行数
     */
    default int increaseLikeCount(Long userId, int count) {
        return update(null, Wrappers.<UserStatisticsDO>lambdaUpdate()
                .setSql("total_likes = total_likes + " + count)
                .eq(UserStatisticsDO::getUserId, userId));
    }

    /**
     * 增加收藏数
     * @param userId 用户ID
     * @param count 增加数量
     * @return 更新行数
     */
    default int increaseFavoriteCount(Long userId, int count) {
        return update(null, Wrappers.<UserStatisticsDO>lambdaUpdate()
                .setSql("total_favorites = total_favorites + " + count)
                .eq(UserStatisticsDO::getUserId, userId));
    }

    /**
     * 增加评论数
     * @param userId 用户ID
     * @param count 增加数量
     * @return 更新行数
     */
    default int increaseCommentCount(Long userId, int count) {
        return update(null, Wrappers.<UserStatisticsDO>lambdaUpdate()
                .setSql("total_comments = total_comments + " + count)
                .eq(UserStatisticsDO::getUserId, userId));
    }
}
